﻿
CREATE PROCEDURE [dbo].[AssortmentUpdate]
(
	@CatalogId int,
	@Name varchar(150),
	@MedFormId int,
	@AssesmentGroupId int,
	@ABList char(1),
	@NotPatentedRus varchar(100),
	@NotPatentedLat varchar(100),
	@GNVLS bit,
	@Mandatory bit,
	@StoreTemperature varchar(20),
	@BeforeOverdue tinyint,
	@NoRecipe bit,
	@ReferentPrice decimal(19, 2),
	@ReferentDate smalldatetime,
	@Note varchar(250),
	@MD datetime,
	@MW varchar(50),
	@ToDelete bit,
	@Original_Id int,
	@Original_MD datetime
)
AS
DECLARE @strMsg nvarchar(500), @intRet int, @intErrCode int
DECLARE @orgName nvarchar(100), @orgMedFormId int, @orgToDelete bit, @orgParentToDelete bit

SET NOCOUNT ON

IF (@Name Is Null) OR (@MedFormId Is Null) OR (@CatalogId Is Null) OR (@ToDelete Is Null)
BEGIN
	SELECT @intErrCode = 1, @strMsg = 'Неправильные параметры в вызове процедуры ' + Object_Name(@@Procid) + ' !'
	RAISERROR (@strMsg, 11, @intErrCode)
	RETURN @intErrCode
END

IF (ltrim(@Name) = '')
BEGIN
	SELECT @intErrCode = 2, @strMsg = 'Незаполнено наименование!'
	RAISERROR (@strMsg, 11, @intErrCode)
	RETURN @intErrCode
END

SELECT @orgName = Name, @orgMedFormId = MedFormId, @orgToDelete = ToDelete
FROM [CA].[Assortment] WHERE Id = @Original_Id AND MD = @Original_MD
IF (@@rowcount <> 1)
BEGIN
	SELECT @intErrCode = 3, 
	@strMsg = 'Данные изменены после последнего запроса!'
	RAISERROR (@strMsg, 11, 1)
	RETURN @intErrCode
END

IF @orgName <> @Name OR @orgMedFormId <> @MedFormId
BEGIN
	IF EXISTS (SELECT TOP 1 ID FROM [CA].[Assortment] WHERE Name = @Name AND MedFormId = @MedFormId) 
	BEGIN
		SELECT @intErrCode = 4, @strMsg = 'Дублируется наименование и лекарственная форма!'
		RAISERROR (@strMsg, 11, @intErrCode)
		RETURN @intErrCode
	END
END

SELECT @orgParentToDelete = ToDelete
FROM [CO].[Catalog] WHERE Id = @CatalogId
IF (@@rowcount <> 1)
BEGIN
	SELECT @intErrCode = 5, 
	@strMsg = 'Отсутствует родительская запись с кодом ' + cast(@CatalogId as varchar(20)) + ' в справочнике фармгрупп!'
	RAISERROR (@strMsg, 11, 1)
	RETURN @intErrCode
END

IF @orgParentToDelete = 1 
BEGIN
	SELECT @intErrCode = 6, 
	@strMsg = 'Родительская запись с кодом ' + cast(@CatalogId as varchar(20)) + ' в справочнике фармгрупп отмечена для удаления!'
	RAISERROR (@strMsg, 11, 1)
	RETURN @intErrCode
END

SELECT @orgParentToDelete = ToDelete
FROM CO.MedForm WHERE Id = @MedFormId
IF (@@rowcount <> 1)
BEGIN
	SELECT @intErrCode = 7, 
	@strMsg = 'Отсутствует родительская запись с кодом ' + cast(@MedFormId as varchar(20)) + ' в справочнике медицинских форм!'
	RAISERROR (@strMsg, 11, 1)
	RETURN @intErrCode
END

IF @orgParentToDelete = 1 
BEGIN
	SELECT @intErrCode = 8, 
	@strMsg = 'Родительская запись с кодом ' + cast(@MedFormId as varchar(20)) + ' в справочнике медицинских форм отмечена для удаления!'
	RAISERROR (@strMsg, 11, 1)
	RETURN @intErrCode
END

IF Not (@AssesmentGroupId Is Null)
BEGIN
	SELECT @orgParentToDelete = ToDelete
	FROM CO.AssessmentGroup WHERE Id = @AssesmentGroupId
	IF (@@rowcount <> 1)
	BEGIN
		SELECT @intErrCode = 9, 
		@strMsg = 'Отсутствует родительская запись с кодом ' + cast(@AssesmentGroupId as varchar(20)) + ' в справочнике групп учета!'
		RAISERROR (@strMsg, 11, 1)
		RETURN @intErrCode
	END

	IF @orgParentToDelete = 1 
	BEGIN
		SELECT @intErrCode = 10, 
		@strMsg = 'Родительская запись с кодом ' + cast(@AssesmentGroupId as varchar(20)) + ' в справочнике групп учета отмечена для удаления!'
		RAISERROR (@strMsg, 11, 1)
		RETURN @intErrCode
	END
END

IF @orgToDelete = 1 --Запись была отмечена для удаления
BEGIN
	IF @ToDelete = 1 
	BEGIN
		SELECT @intErrCode = 11, 
		@strMsg = 'Нельзя редактировать запись, отмеченную для удаления!'
		RAISERROR (@strMsg, 11, 1)
		RETURN @intErrCode
	END
END ELSE BEGIN
	IF @ToDelete = 1 
	BEGIN
		SELECT @intErrCode = 12, 
		@strMsg = 'Для удаления данных должна использоваться другая процедура!'
		RAISERROR (@strMsg, 11, 1)
		RETURN @intErrCode
	END
END

EXEC [dbo].[ProcessStatistic] @Note OUTPUT, @MD OUTPUT, @MW OUTPUT
	SET NOCOUNT OFF;
UPDATE [CA].[Assortment] SET [CatalogId] = @CatalogId, 
[Name] = @Name, 
[MedFormId] = @MedFormId, 
[AssesmentGroupId] = @AssesmentGroupId, 
[ABList] = @ABList, 
[NotPatentedRus] = @NotPatentedRus, 
[NotPatentedLat] = @NotPatentedLat, 
[GNVLS] = @GNVLS, 
[Mandatory] = @Mandatory, 
[StoreTemperature] = @StoreTemperature, 
[BeforeOverdue] = @BeforeOverdue, 
[NoRecipe] = @NoRecipe, 
[ReferentPrice] = @ReferentPrice, 
[ReferentDate] = @ReferentDate, 
[Note] = @Note, [MD] = @MD, [MW] = @MW, ToDelete = @ToDelete 
WHERE Id = @Original_Id AND MD = @Original_MD;
	
SELECT Id, GId, CatalogId, Name, MedFormId, AssesmentGroupId, ABList, NotPatentedRus, NotPatentedLat, GNVLS, Mandatory, StoreTemperature, BeforeOverdue, NoRecipe, ReferentPrice, ReferentDate, 
Note, MD, MW, ToDelete
FROM CA.Assortment WHERE (Id = @Original_Id)

RETURN 0
